package com.example.demo.service;

import com.example.demo.client.evt.sysbasequery.QueryUserEvt;
import com.example.demo.client.vm.sysbasequery.QueryUserVm;
import com.example.demo.domain.CsSmImportLogD;
import com.ffcs.oss.param.vm.QueryPageVm;
import com.example.demo.web.rest.evt.OperateLogEvt;
import com.example.demo.web.rest.evt.SaveBatchUserPermissionEvt;
import com.example.demo.web.rest.evt.SaveUserEvt;
import com.example.demo.web.rest.vm.BatchUserEvt;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * 用户管理接口
 * @Author zmf
 * @Date 2018/12/12  18:38
 */
public interface UserService {
    /**
     * 重置密码
     * @param userId
     * @param pwd
     * @return
     * @throws Exception
     */
    String resetPassword(Long userId, String pwd,String loginName) throws Exception;
    /**
     * 更新用户状态和密码修改时间
     * @param status
     * @param userId
     */
    void updateStatusAndPasswordUpdateDate(Integer status, Long userId);
    /**
     * 更新用户状态
     * @param status
     * @param userId
     */
    void updateStatus(Integer status, Long userId);
    /**
     * 注销用户及删除用户与角色、权限、资源、用户组的关系
     * @param userId
     */
    void delUser(Long userId);
    /**
     * 保存用户信息及用户与用户组、权限、角色、资源的关系
     * @param evt
     * @throws Exception
     */
    void saveUser(SaveUserEvt evt) throws Exception;
    /**
     * 保存批量赋权
     * @param evt
     */
    void saveBatchUserPermissions(SaveBatchUserPermissionEvt evt);

    /**
     * 重置密码操作记录操作日志
     */
    void saveResetPasswordLog(OperateLogEvt evt);

    /**
     * 用户管理-首页查询
     */
    QueryPageVm<QueryUserVm> queryUser(QueryUserEvt evt);

    /**
     * 获取当前登录用户信息
     * */
    QueryUserVm getLoginUserInfo();

    /**
     * 更新用户状态
     */
    void updateStatusMapper(Integer status, Long userId) throws ParseException;

    /**
     * 查询用户近期使用的五个密码
     *
     * @param userId
     * @return
     */
    List<String> getNearlyFivePwd(Long userId);

    /**
     * 保存用户的密码修改信息
     *
     * @param userId
     * @param newPassword
     * @return
     */
    boolean saveUserPwdInfo(Long userId, String newPassword);

    String importUser(List<Map<String, Object>> paramsList, CsSmImportLogD csSmImportLogD) throws Exception;


    /**
     * 批量修改用户配置表的是否需要修改密码状态
     */
    void updateMustUpdStatus();

    String batchUser(BatchUserEvt evt);
}
